package com.example.rabbitmqboot.listener;

import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.impl.AMQImpl;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.io.IOException;

/**
 * @author cxu
 * @version 1.0.0
 * @description 队列监听
 * @date 2021年09月21日 21:56:00
 */
@Component
public class RabbitListenerComponent {
    /**
     * @description 配置队列监听
     * @author cxu
     * @param: message
     * @param: channel
     * @date 2021/9/25 10:39
     */
    @RabbitListener(queues = "topic_queue",ackMode = "MANUAL")
    public void printMessage(Message message, Channel channel) throws IOException {
        // 消息标识
        long deliveryTag = message.getMessageProperties().getDeliveryTag();
        try {
            // 1. 接收消息
            System.out.println(new String(message.getBody()));
            // 2.处理业务
            //模拟异常
            int i = 2 / 0;
            // 3.手动签收
            /**
             * 参数说明：
             *  deliveryTag：消息唯一标识
             *  multiple：boolean类型 是否应用多消息 为true时，会同时签收之前的多个消息
             */
            channel.basicAck(deliveryTag, true);
        }catch (Exception e){
            // 发生异常重回队列
            /**
             * 参数说明：
             *  deliveryTag：
             *  multiple：
             *  requeue：是否重回队列
             */
            channel.basicNack(deliveryTag,true,true);
        }
    }

}
